package com.ruoyi.framework.web.service;

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.responseBodyJson.CustomerJsonSerializer;
import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysDept;
import com.ruoyi.system.domain.SysDistricts;
import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysDistrictsService;
import com.ruoyi.yf.domain.YfDept;
import com.ruoyi.yf.domain.YfHospitalIndividuationData;
import com.ruoyi.yf.domain.YfMedicalWasteTreatmentManager;
import com.ruoyi.yf.service.IYfDeptService;
import com.ruoyi.yf.service.IYfHospitalIndividuationDataService;
import com.ruoyi.yf.service.IYfMedicalWasteTreatmentManagerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * XiaoYi html调用 thymeleaf 实现参数管理
 *
 * @author XiaoYi...
 */
@Service("dep")
public class DepartmentService {

    //机构机构医院
    @Autowired
    private ISysDeptService iSysDeptService;
    @Autowired
    private SysDeptMapper deptMapper;


    //地区
    @Autowired
    private ISysDistrictsService SysDistrictsService;

    //医院科室
    @Autowired
    private IYfDeptService yfDeptService;

    //三方医废处理公司列表
    @Autowired
    private IYfMedicalWasteTreatmentManagerService yfMedicalWasteTreatmentManagerService;

    /**
     * 医院个性化配置表
     */
    @Autowired
    private IYfHospitalIndividuationDataService yfHospitalIndividuationDataService;


    /**
     * 当前用户下 机构是否显示胎盘 权限
     */
    public String hasAnyTp() {
        Long deptId = ShiroUtils.getSysUser().getDeptId();
        YfHospitalIndividuationData data = new YfHospitalIndividuationData();
        data.setDictValue("true");
        data.setDictType("placenta_statistics");
        data.setStatus("0");
        data.setDelFlag("0");
        data.setHospitalId(deptId);
        List<YfHospitalIndividuationData> yfHospitalIndividuationData = yfHospitalIndividuationDataService.selectYfHospitalIndividuationDataList(data);
        if (yfHospitalIndividuationData.size() > 0)
            return "";
        return "hidden";
    }

    /**
     * 获取所有机构 除暂存点
     *
     * @return
     */
    public List<SysDept> getDeptAll() {
        //获取登录用户 机构id
        Long deptId = ShiroUtils.getSysUser().getDeptId();
//        System.out.println("获取登录用户 机构id" + deptId);
        List<SysDept> sysDepts = deptMapper.SYS_DEPT_LIST_All(deptId);
        return sysDepts;
    }

    /**
     * 获取医废报表模版机构列表 会自动过滤已添加的机构
     *
     * @return
     */
    public List<SysDept> getReportDept() {
        //获取登录用户 机构id
        Long deptId = ShiroUtils.getSysUser().getDeptId();
//        System.out.println("获取登录用户 机构id" + deptId);
        return deptMapper.YF_REPORT_DEPT_LIST(deptId);
    }


    /**
     * 获取本机构下所有 医院、县医院、乡镇卫生院、服务中心
     *
     * @return
     * @author XiaoYi...
     * @date 2020/5/20 18:12
     */
    public List<JSONObject> getDep() throws JsonProcessingException {
        //获取登录用户 机构id
        Long deptId = ShiroUtils.getSysUser().getDeptId();
//        System.out.println("获取登录用户 机构id" + deptId);
        //通过id 获取用户 所属医院id
        List<SysDept> sysDepts = iSysDeptService.selectHospital(deptId);
        //过滤返回数据
        CustomerJsonSerializer cjs = new CustomerJsonSerializer();
        cjs.filter(SysDept.class, "deptId,deptName", null);
        //返回结果json
        List jsonObject = new ArrayList();
        for (SysDept re : sysDepts) {
            String include = cjs.toJson(re);
            JSONObject json = JSONObject.parseObject(include);
            jsonObject.add(json);
        }
        return jsonObject;
    }

    /**
     * 根据用户所属医院 及以下 所有科室
     *
     * @return
     */
    public List<YfDept> yfDeptListAll() {
        //获取登录用户 机构id
        Long deptId = ShiroUtils.getSysUser().getDeptId();
        List<YfDept> list = yfDeptService.select_sysDept_yfDeptList(deptId);
        return list;
    }


    /**
     * 根据医院获取所有科室
     *
     * @return
     */
    public List<YfDept> getYfDeptListByHospitalId(Long hosid) {
        List<YfDept> list = yfDeptService.getYfDeptListByHospitalId(hosid);
        return list;
    }


    /**
     * 查询医院列表
     *
     * @param districtsId 地区编号
     * @param hospList    查询区县地址类型列表
     * @return
     */
    public List<SysDept> depts(Integer districtsId, String hospList) {
        return iSysDeptService.selectHospList(districtsId, hospList != null ? hospList.split(",") : null);
    }

    /**
     * 获取地区
     *
     * @param id
     * @return
     */
    public SysDistricts getDistricts(Integer id) {
        return SysDistrictsService.selectSysDistrictsById(id);
    }

    /**
     * 获取本机构下的所有医院
     *
     * @param deptId 机构id
     * @return
     */
    public List<SysDept> getCurrentDeptList(Long deptId) {
        return iSysDeptService.selectHospital(deptId);
    }

    /**
     * 获取当前角色机构下的所有医院
     */
    public List<SysDept> getCurrentDeptList() {
        return iSysDeptService.selectHospital(ShiroUtils.getSysUser().getDeptId());
    }

    /**
     * 获取本机构下未签署三方医废处理合同的的所有医院
     *
     * @param deptId 机构id
     * @return
     */
    public List<SysDept> getCurrentNomedicalWasteTreatmentContractSignedDeptList(Long deptId) {
        List<SysDept> sysDepts = iSysDeptService.selectMedicalWasteHospitals(deptId, deptId);
        return sysDepts;
    }

    /**
     * 获取三方处理单位列表
     * 老的查询处置公司的方法（已废弃）
     * @return
     */
//    public List<YfMedicalWasteTreatmentManager> getYFMedicalWasteList() {
//        return yfMedicalWasteTreatmentManagerService.selectYfMedicalWasteTreatmentManagerList(new YfMedicalWasteTreatmentManager("0"));
//    }
    /**
     * 获取三方处理单位列表
     * 新的查询处置公司的方法  它是直接调用的这方法
     * 方法的返回值类型要改
     * @return 测试后端就先debug，看看返回的数据有没有问题
     */
    public List<SysDept> getYFMedicalWasteList() {
        //应该调用方法查询 sysdept表里的处置公司列表返回
        List<SysDept> czgss = deptMapper.selectCzgs();
        return czgss;
    }
    public List<SysDept> getYFMedicalWasteListNew() {
        //查询当前用户的下属的处置公司
        Long deptId = ShiroUtils.getSysUser().getDept().getDeptId();
        List<SysDept> czgss = deptMapper.selectCzgss(deptId);
        return czgss;
    }

}
